<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>~/jjj/ntl-10.1.0dev/doc/HNF.cpp.html</title>
<meta name="Generator" content="Vim/7.4">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="cpp">
<meta name="settings" content="use_css,pre_wrap,no_foldcolumn,expand_tabs,prevent_copy=">
<meta name="colorscheme" content="macvim">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffff; }
body { font-family: monospace; color: #000000; background-color: #ffffff; }
* { font-size: 1em; }
.String { color: #4a708b; }
.Comment { color: #0000ee; font-style: italic; }
.Type { color: #008b00; font-weight: bold; }
.PreProc { color: #1874cd; }
-->
</style>

<script type='text/javascript'>
<!--

-->
</script>
</head>
<body>
<pre id='vimCodeElement'>

<span class="Comment">/*</span><span class="Comment">*************************************************************************\</span>

<span class="Comment">MODULE: HNF</span>

<span class="Comment">SUMMARY:</span>

<span class="Comment">A routine for computing Hermite Normal Forms</span>

<span class="Comment">\*************************************************************************</span><span class="Comment">*/</span>


<span class="PreProc">#include </span><span class="String">&lt;NTL/mat_ZZ.h&gt;</span>

<span class="Type">void</span> HNF(mat_ZZ&amp; W, <span class="Type">const</span> mat_ZZ&amp; A, <span class="Type">const</span> ZZ&amp; D);

<span class="Comment">// The input matrix A is an n x m matrix of rank m (so n &gt;= m), and D</span>
<span class="Comment">// is a multiple of the determinant of the lattice L spanned by the</span>
<span class="Comment">// rows of A.  W is computed as the Hermite Normal Form of A; that is,</span>
<span class="Comment">// W is the unique m x m matrix whose rows span L, such that</span>

<span class="Comment">//   - W is lower triangular,</span>
<span class="Comment">//   - the diagonal entries are positive,</span>
<span class="Comment">//   - any entry below the diagonal is a non-negative number</span>
<span class="Comment">//     strictly less than the diagonal entry in its column.</span>

<span class="Comment">// Currently, this is implemented using the algorithm of [P. Domich,</span>
<span class="Comment">// R. Kannan and L. Trotter, Math. Oper. Research 12:50-59, 1987].</span>

</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->
